<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /* 1.代码分类
               *全局代码
               *局部（函数）代码
           2.全局执行上下文
               *在执行全局代码前，将window确定为全局执行上下文对象
               *对全局数据进行预处理
                   *var定义的变量==>undefined,添加为window的属性
                   *function声明的全局函数，添加为window的方法
                   *this==>赋值(window)
           3.函数执行上下文
               *在调用函数后，准备执行函数体前，创建相应的函数执行上下文对象（存在于栈中）
               *对局部数据进行预处理
                   *形参变量==>赋值(实参)，添加为执行上下文的属性
                   *arguments==>赋值(形参列表)，添加为执行上下文的属性
                   *var定义的变量==>undefined,添加为执行上下文的属性
                   *function声明的函数，添加为执行上下文的方法
                   *this==>赋值(调用函数的对象)        
        */
        console.log(this);
        // window中有属性a和方法fun
        var a = 2;
        function fun(){
        }

        b(2,3);
        function b(a1,a2){
            console.log(a1);
            // 2
            console.log(arguments);
            // Arguments(2) [2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
            console.log(this);
            // Window {window: Window, self: Window, document: document, name: '', location: Location, …}
        }
    </script>
</head>
<body>
    
</body>
</html>